草庐IT

CountDownLatch和ExecutorService 线程池cachedThreadPool.submit

全部标签

java - 线程 - 为什么我们在等待时使用 while(true)

在Java中的大多数线程示例中,通常使用while(true)block,如下所示:while(true){try{wait()}catch(Exceptionex){/*dosomething*/}}使用while(true)的目的是什么?它们在什么样的场景下特别有用?客户端/服务器通信?谢谢,-伊瓦尔 最佳答案 这种构造在我们创建线程池和可重用线程时使用。基本上,while(true)构造可防止池中的线程退出。一个例子是生产者-消费者的情况,其中线程wait()直到队列为空,一旦队列有数据,它们就会notify()ied和其中一

java - 线程不安全的递减/递增 - 为什么大多数是积极的?

我想知道java线程中不安全递减/递增的结果,所以有我的程序:主类:publicclassStart{publicstaticvoidmain(String[]args){intcount=10000000,pos=0,neg=0,zero=0;for(intx=0;x0)pos++;elseneg++;}System.out.println(Integer.toString(neg)+"\t\t\t"+Integer.toString(pos)+"\t\t\t"+Integer.toString(zero));}}线程类:publicclassMagicimplementsRunna

java - 生产者消费者线程间通信

在线程间通信方面遇到问题,并通过到处使用“虚拟消息”来“解决”它。这是一个坏主意吗?有哪些可能的解决方案?我遇到的示例问题。主线程启动一个线程来处理并将记录插入数据库。主线程读取一个可能很大的文件并将一个记录(对象)一个接一个地放入阻塞队列中。处理线程从队列中读取并工作。如何告诉“处理线程”停止?队列可以是空的,但工作没有完成,主线程现在也没有,当处理线程完成工作并且不能中断它时。所以处理线程做while(queue.size()>0||!Thread.currentThread().isInterrupted()){MyObjectobject=queue.poll(100,Time

java - 选择线程执行屏障操作 - Java CyclicBarrier

查看CyclicBarrier的javadoc,我在类文档中发现了以下我不完全理解的语句。来自javadoc:Ifthebarrieractiondoesnotrelyonthepartiesbeingsuspendedwhenitisexecuted,thenanyofthethreadsinthepartycouldexecutethatactionwhenitisreleased.Tofacilitatethis,eachinvocationofawait()returnsthearrivalindexofthatthreadatthebarrier.Youcanthenchoo

java - Spring MVC单例线程安全?

我有一个单例Springbean(默认范围)。因此,一个实例将被多个线程使用。然而,我对线程安全有点困惑,显然所有Springbean如果它们是无状态的,它们都是线程安全的,但我的bean不是无状态的,它有各种实例变量,每个请求/其他Controller/类都使用这些变量。这是我的单例bean的开头:publicclassPcrfSimulator{privatefinalCustomGxSessionIdCacheImplgxSessionIdCache=newCustomGxSessionIdCacheImpl();privatefinalPcrfRecordpcrfRec=new

java - 线程中的最终字段语义

这是来自JLS17.5:Theusagemodelforfinalfieldsisasimpleone.Setthefinalfieldsforanobjectinthatobject'sconstructor.Donotwriteareferencetotheobjectbeingconstructedinaplacewhereanotherthreadcanseeitbeforetheobject'sconstructorisfinished.Ifthisisfollowed,thenwhentheobjectisseenbyanotherthread,thatthreadwill

java - 计数器更改时通知线程

我正在尝试为自己设计一个类作为CodeKata,它具有可以设置的值属性,并且该类可以发出ValueListener实例。这个想法是有一个ValueHolder实例,许多客户端线程同时访问它。每个客户端线程都请求了一个ValueWatcher并调用了waitForValue()。我真正纠结的是我应该在wait()周围的while循环中使用什么条件来避免虚假通知(即值没有改变)。我可以看到这种设计可能会使ValueWatcher实例错过更新,但现阶段我不太担心。如果能提供任何指导,我们将不胜感激!publicclassValueHolder{privateintvalue=0;privat

java - ZeroMQ:如何实现类C的多线程

在C中,我们有套接字和描述符,可以只获取其中之一并将它们交给线程,这使得您可以接受传入连接并将工作交给您喜欢的线程和线程可以自己发送回响应。我的问题是,如何使用ZeroMQ实现这一点?使用Request-Reply模式,我似乎无法异步发送和接收,响应必须按顺序进行,我的目标是让多个客户端连接到单个服务器,不按顺序发送响应。我查看了请求响应模式,但API明确指出,将套接字与多个线程一起使用是个坏主意。也许我错过了什么或者ZeroMQ比我知道的更聪明。如果您需要任何进一步的信息,请发表评论,我会尽力提供信息。我还查看了提供的示例:CodeExamples这是套接字描述:ZMQ-Socket

java - 线程池、共享数据、Java同步

比如说,我有一个数据对象:classValueRef{doublevalue;}每个数据对象存储在主集合中的位置:CollectionmasterList=...;我还有一个作业集合,其中每个作业都有一个本地数据对象集合(其中每个数据对象也出现在masterList中):classJobimplementsRunnable{CollectionneededValues=...;voidrun(){doublesum=0;for(ValueRefx:neededValues)sum+=x;System.out.println(sum);}}用例:for(ValueRefx:masterL

java - 线程交错 - 可以输出什么可能的结果

接受这个话题:a=3;b=3;并接受这个线程:b=5;a=5;他们都从监视器访问相同的数据。如果它们同时运行(通过使用线程),可能会出现什么结果? 最佳答案 因为线程的操作可以按任何顺序执行,所以a=3,5和b=3,5的任何组合都是可能的。为future的读者澄清:线程1:a=3b=3,线程2:b=5a=5可能的操作订单:我:线程1,线程1,线程2,线程2II:线程1、线程2、线程1、线程2III:线程1、线程2、线程2、线程1IV:线程2、线程1、线程2、线程1V:线程2、线程2、线程1、线程1VI:线程2、线程1、线程1、线程2